<?php
/** [类型属性表逻辑层模型]
 * @Author: 976123967@qq.com
 * @Date:   2015-01-15 13:52:29
 * @Last Modified by:   chenli
 * @Last Modified time: 2015-02-28 23:42:09
 */
class AttrLogic extends Model{

	protected 	$tableName = 'attr';
	private $cache;



	/**
	 * [_initialize 初始化]
	 * @return [type] [description]
	 */
	public function _initialize()
	{
		$this->cache = S('attr');
	}

	// 自动验证
	/* array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间])
	*
	*  验证条件
	*  Model::EXISTS_VALIDATE 或者0 存在字段就验证 （默认）
	*  Model::MUST_VALIDATE 或者1 必须验证
	*  Model::VALUE_VALIDATE或者2 值不为空的时候验证
	*
	*  验证时间
	*  Model:: MODEL_INSERT 或者1新增数据时候验证
	*  Model:: MODEL_UPDATE 或者2编辑数据时候验证
	*  Model:: MODEL_BOTH 或者3 全部情况下验证（默认）
	* */

	protected $_validate = array(
	   	array('attr_name','require','属性名称不能为空',1),

	   	array('sort','require','排序不能为空',1),
	   	array('sort','/^\d+$/i','排序只能填写数字',1,'regex',3)
	);

	/**
	 * [get_all_by_typeid 读取字段通过typeid]
	 * @param  [type] $mid [description]
	 * @return [type]      [description]
	 */
	public function get_all_by_typeid($typeid)
	{
		$data = $this->cache[$typeid];
		if(!$data) return false;
		foreach($data as $k=>$v)
		{
			$data[$k]['pic'] 		= $v['is_pic']? '有':'没有';
			$data[$k]['showtype'] 	= $v['type']==1?'单选':'多选';
		}
		
		return $data;
	}

	/**
	 * [update_cache 更新缓存]
	 * @return [type] [description]
	 */
	public function update_cache()
	{
		$data = $this->order(array('sort'=>'asc','attr_id'=>'asc'))->select();

		$attrValueModel = D('AttrValue');
		$temp = array();
		if($data)
		{
			foreach($data as $k=>$v)
			{
				$v['attr_value'] = $attrValueModel->where(array('attr_attr_id'=>$v['attr_id']))->select();
				$temp[$v['type_typeid']][$v['attr_id']]=$v;
			}
		}

		S('attr',$temp);
	} 

	/**
	 * [$_auto 自动完成]
	 * @var array
	 */
	protected $_auto = array(
		array('type_typeid','_typeid',3,'callback'),
		array('sort','intval',3,'function'),
		
	);

	/**
	 * [_typeid typeid自动完成]
	 * @return [type] [description]
	 */
	protected function _typeid()
	{
		return  I('post.typeid');
	}



	/**
	 * [add_attr 添加属性]
	 */
	public function add_attr()
	{
		if(!$this->create())
			return false;
		$attrId = $this->add();

		$value  =  I('post.attr_value');

		$attrValueModel =  D('AttrValue');
		if($value)
		{
			foreach($value as $v)
			{
				if($v)
				{
					$data[] = array(

					'attr_attr_id'=>$attrId,
					'attr_value'=>$v,

					);
				}

				
				
			}

			$attrValueModel->addAll($data);
		}
		$this->update_cache();

		return true;
	}

	/**
	 * [find_one 查找一条记录]
	 * @return [type] [description]
	 */
	public function find_one()
	{
		$attrId   = I('get.attrId');
		$typeid   = I('get.typeid');
		$field = $this->cache[$typeid];
		if(!$field)
		{
			$this->error = '属性不存在';
			return false;
		}
		foreach($field as $k=>$v)
		{
			if($k==$attrId)
				return $v;
		}
		$this->error = '属性不存在';
		return false;
	}

	/**
	 * [update_attr 更新属性]
	 * @return [type] [description]
	 */
	public function update_attr()
	{
		if(!$this->create())
			return false;

		$this->save();



		/***更改属性值***/
		$attrId =I('post.attr_id');

		$attrValueModel =  D('AttrValue');
		// 删除当前属性的所有值
		$attrValueModel->where(array('attr_attr_id'=>$attrId))->delete();


		// 添加属性值
		$data = array();
		$value =  $_POST['attr_value'];
		

	
		if($value)
		{
			foreach($value as $v)
			{


				if(is_array($v))
				{

					if(current($v))
					{
						$data = array(
							'attr_value_id'=>key($v),
							'attr_attr_id'=>$attrId,
							'attr_value'=>current($v),

						);
					}
				}
				else
				{
					if($v)
					{
						$data = array(

						'attr_attr_id'=>$attrId,
						'attr_value'=>$v,

						);
					}
				}
				//p($data);
				$attrValueModel->add($data);
			}
		}
		
		$this->update_cache();
		//die;
		return true;


	}


	/**
	 * [del_attr 删除属性]
	 * @return [type] [description]
	 */
	public function del_attr()
	{
		$attrId = I('get.attrId');
		$typeid = I('get.typeid');
		$data   = isset($this->cache[$typeid][$attrId])?$this->cache[$typeid][$attrId]:'';
		if(!$data)
		{
			$this->error = '属性不存在';
			return false;
		}
		$this->delete($attrId);
		D('AttrValue')->where(array('attr_attr_id'=>$attrId))->delete();
		// 更新缓存
		$this->update_cache();
		return true;
	}


	/**
	 * [operation 处理批量操作]
	 * @return [type] [description]
	 */
	public function operation()
	{
		$attrId  = I('post.attrId');
		switch (true) 
		{
			// 排序
			case isset($_POST['update_sort']):
				$sort = I('post.sort');
				foreach($attrId as $k=>$v)
				{
					$this->save(array('sort'=>$sort[$k],'attr_id'=>$v));
				}
				$msg= '排序成功';
				break;
			default:
				$this->error = '操作选择错误';
				return false;

		}
		// 更新缓存
		$this->update_cache();
		return $msg;
	}


}